package com.sservice.model.dao;

import com.sservice.banfu.e.SalePerson;
import com.sservice.commonBusiness.e.DataR;
import com.sservice.commonBusiness.vo.CategoryVo;
import com.sservice.model.entity.Order;
import com.sservice.model.entity.OrderShop;
import com.sservice.model.vo.OfferVo;
import com.sservice.model.vo.OrderShopVo;
import com.sservice.model.vo.OrderVo;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface IOrderDao {
    int deleteByPrimaryKey(Integer id);

    int insert(Order record);

    int insertSelective(Order record);

    Order selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Order record);

    int updateByPrimaryKey(Order record);

    /**
     * 获取拼团成员
     *
     * @param sourceId 拼团ID
     * @return
     */
    List<SalePerson> groupMember(String sourceId);

    /**
     * 根据订单号查找订单
     *
     * @param no
     * @return
     */
    Order selectOneByNo(String no);

    List<OrderVo> queryByPage(OrderVo user);

    /**
     * 统计
     *
     * @param user
     * @return
     */
    Integer countPlainByPage(OrderVo user);

    /**
     * 查询
     *
     * @param user
     * @return
     */
    List<OrderVo> queryPlainByPage(OrderVo user);

    int countWithOfferByPage(OrderVo user);

    List<OrderVo> queryWithOfferByPage(OrderVo user);

    /**
     * 批量付款
     *
     * @param orders
     * @return
     */
    int payOrderInBatch(List<Order> orders);


    /***
     * 运营人员名下商品订单
     * @param arg
     * @param list  goods_id
     * @return
     */
    List<OrderVo> queryByPage(OrderVo arg, List list);


    /**
     * 运营人员名下商品订单
     *
     * @param user
     * @param list goods_id
     * @return
     */
    int queryCount(OrderVo user, List list);

    /***
     * 我的订单
     * @param user
     * @return
     */
    List<OrderVo> queryMyOrdersByPage(OrderVo user);


    /**
     * 符合统计条件的总数统计
     *
     * @param user
     * @return
     */
    int queryCount(OrderVo user);

    /**
     * 我的订单数量
     *
     * @param user
     * @return
     */
    int queryMyOrderCount(OrderVo user);


    /**
     * 当月定单数
     *
     * @return
     */
    int queryCurrentMonthCount();


    /**
     * 查询某个拼场-主题正在进行的拼团,
     * ongoing  : 默认1 ，正在进行的拼场
     * themeId  : 拼场-主题Id，某个具体主题
     *
     * @param orderShop
     * @return
     */
    List<OrderVo> selectPcByThemeId(OrderShopVo orderShop);

    /**
     * 统计用户某个时间段有效订单（执行中、已付款、已收货）成长值，有如下3个必穿参数
     * arg.saleId 某个销售员
     * arg.dateStart 统计开始时间
     * arg.dateEnd 统计截止时间
     *
     * @param arg
     * @return
     */
    Integer totalGrowValue(OrderVo arg);

    /**
     * 购物车中的商品
     *
     * @param arg
     * @return
     */
    List<OfferVo> getShopCarts(OrderShop arg);

    /**
     * 1. 查询购物车中的商品, sp_id
     * 2. 查询某个订单中的商品项(订单项：一个sku称之一个订单项)，传orderId,sp_id
     *
     * @param arg
     * @return
     */
    List<OfferVo> selectShopCartItems(OrderShop arg);

    /**
     * 根据关系表查询用户的礼品卡、优惠券
     * arg.type1 数据类型
     * arg.dataRtype1 关系类型
     * arg.sourceId 用户ID
     * arg.remark 关系状态
     *
     * @param arg
     * @return
     */
    List<CategoryVo> queryCategoryByCondition(CategoryVo arg);

    /**
     * 支付明细
     * arg.source_id 参数必穿，订单ID
     *
     * @param arg
     * @return
     */
    List<DataR> queryOrderPayDetail(DataR arg);

    /***
     * 查询用户拼团
     * arg.saleId  :   用户id
     * arg.status  :   订单状态
     * arg.ongoing :   拼团状态
     * @param arg
     * @return
     */
    List<OrderVo> selectGroupOrder(OrderVo arg);

}